#include <header.h>

/*
使用sigaction注册2号信号的处理函数
1） 允许自动重启低速系统调用
2）在处理2号信号时阻塞3号信号，不会被3号信号打断；
3)  在2号信号的信号处理函数中，使用sigpending函数判断一下有没有3号信号处于未决状态；
*/

void print_set(sigset_t *set){
    int i;
    for (i = 1; i<32; i++) {
        if (sigismember(set, i))
            putchar('1');
        else
            putchar('0');
    }
    printf("\n");
}

void handler(int num){
	printf("i am handler\n");
    sleep(5);

    // 判断未决信号
    sigset_t pre_set;
    int ret = sigpending(&pre_set);
    ERROR_CHECK(ret, -1, "sigpending\n");
    print_set(&pre_set);

}


int main(int argc, char *argv[]){

    // 注册2号信号
	struct sigaction act;
	act.sa_handler = handler;

    // 可重启低速系统调用
    act.sa_flags = SA_RESTART;

    // 临时屏蔽3
    sigset_t set;
    sigemptyset(&set);
    sigaddset(&set, 3);
    act.sa_mask = set;

	sigaction(2, &act, NULL);

    // 屏蔽3信号，此处要用临时屏蔽，不用全局屏蔽
    // sigset_t set;
    // sigemptyset(&set);
    // sigaddset(&set, 3);
    // sigprocmask(SIG_BLOCK, &set, NULL);

    

	while(1){
        // TODO 循环读取stdin
    }

	return 0;
}